angular.module('app.services', ['ngCookies','im.models'])
    .factory('im', function () {
        if (typeof(IM) == 'undefined') {
            alert('连接IM服务器失败!');
            throw new Error('连接IM服务器失败!');
        } else {
            return IM;
        }
    })

    .factory('serviceInit', ['$cookieStore', 'im', 'user', 'IM_CONSTANT', function ($cookieStore, im, user, IM_CONSTANT) {
        var key = '1e6870eb-e813-4202-9d17-8740beebd04d';
        var roomNum = '20279713';
        var pwd = '';
        var si = {};

        si.init = function () {
            //绑定key
            im.bind(key);

            if (im.isLogined()) {
                var _user = $cookieStore.get('user');
                if (_user) {
                    user.account = _user.account;
                    user.nickname =  _user.nickname;
                } else {
                    var tag = Math.floor(Math.random() * 10000 + 1);
                    user.account = 'vdiy' + tag;
                    user.nickname = 'TestUser' + tag;
                    $cookieStore.put('user', user);
                }

                console.log(user);

                im.login(user.account, pwd, function (data) {
                    console.log('聊天室连接成功,状态:' + data);

                    // 进入房间
                    im.enterRoom(roomNum, function (data) {
                        console.log('进入房间成功:' + data);
                        // 开始监听消息
                        console.log('stat watch msg');
                        im.onMsg([IM_CONSTANT.CHAT_TYPE.ROOM,IM_CONSTANT.CHAT_TYPE.GROUP,IM_CONSTANT.CHAT_TYPE.USER], function (data) {
                            console.log('on msg return:');
                            console.log(data);
                        });

                        // 监听通知
                        console.log('stat watch notifyss');
                        im.onNotify(IM_CONSTANT.NOTIFY.GROUP.DISMISS, function (data) {
                            console.log('dismiss notify return:');
                            console.log(data);
                        });
                        im.onNotify(IM_CONSTANT.NOTIFY.GROUP.ENTER, function (data) {
                            console.log('enter notify return:');
                            console.log(data);
                        });
                        im.onNotify(IM_CONSTANT.NOTIFY.GROUP.KICKOUT, function (data) {
                            console.log('kickout notify return:');
                            console.log(data);
                        });
                        im.onNotify(IM_CONSTANT.NOTIFY.GROUP.LEAVE, function (data) {
                            console.log('leave notify return:');
                            console.log(data);
                        });
                    }, function (data) {
                        console.log('进入失败' + data);
                    });
                }, function (data) {
                    console.log('聊天室连接失败,状态:' + data);
                });
            }
            else console.log("重复的登录请求!");
        };

        if (im) return si;
        else throw new Error('IM server connet fail');
    }])

    .factory('chat', ['im', 'user', 'msg', 'IM_CONSTANT', function (im, user, msg, IM_CONSTANT) {
        var roomNum = '20279713';

        var chat = {};

        var getMsgData = {
            /**
             * senderAccount -- 发送者帐号
             * endTime -- 结束时间(毫秒)
             * receiverType -- 接收者类型
             * receiverId -- 接收者id
             * index -- 索引,默认0
             * count -- 数量,默认16
             */
            senderAccount: null,
            endTime: null,
            receiverType: null,
            receiverId: null,
            index: null,
            count: null
        };

        //发送文本消息
        chat.sendText = function (content,msgs) {
            msg.senderAccount = user.account;
            msg.chatType = IM_CONSTANT.CHAT_TYPE.ROOM;
            msg.content = content;
            msg.receiverId = roomNum;
            msg.extraData = '20120201';
            msg.msgType = IM_CONSTANT.MSG_TYPE.TEXT;
            console.log(msg);
            im.sendText(msg, function (data) {
                msgs.push(data);
                console.log('发送成功' + data);
            }, function (data) {
                console.log('发送失败' + data);
            });
        };


        getMsgData.receiverId = roomNum;
        getMsgData.index = 1;
        getMsgData.count = 32;
        getMsgData.receiverType = IM_CONSTANT.CHAT_TYPE.ROOM;

        chat.getMsgs = function (msgs) {
            im.res.getMsgs(getMsgData, function (data) {
                console.log('获取Msgs:', data);
                msgs = msgs.concat(data);
                console.log(msgs);
            }, function (data) {
                console.log('获取Msgss失败:' + data);
            });
        };

        return chat;
    }]);
